万字长文:汽车标定技术--XCP概述
1.汽车标定概述
汽车的标定技术,最初是源自对发动机的特征值、曲线Map和图表参数的一个动态优化调整以适配不同发动机、不同车型对动力的需求。
它的基本思路是将发动机各种控制算法固化在MCU的Flash中,但是这些算法所需要用的参数通过技术手段抽象出来并在ram中运行,标定人员可以通过修改这些参数来观察算法的输出是否满足要求。注意哈,虽然说我们知道这个参数是可以修改的,但对于CPU或者控制算法来说,这些参数其实是常量,只有控制算法的输出才是变量。
Measurement, Calibration and Diagnosis)。
ASAM-MCD-1MC:ECU和标定测量系统接口 ASAM-MCD-2MC:即A2L文件,是控制器内部信息描述文件规范 ASAM-MCD-3MC:此接口用于将另一个系统连接到标定测量系统,例如用于试验台自动化 2.XCP协议由来及版本介绍
有了上述基本概念,我们知道标定测量系统和ECU之间的桥梁就是ASAM-MCD-1MC,最初就是大家都比较熟的CCP(基于CAN的标定协议,于1995年提出,当前为2.01,1999定版),但是由于CAN的速率特性,对测量数据的时间戳不够精确;再加上目前ADAS等高测量速率要求,CCP逐渐不能满足要求;因此将该协议从CCP中抽象出来是非常有必要的,这时候就出现了XCP(Universal Measurement and Calibration Protocol),“X”表示的是可变的传输层协议,具体如下:
截止到目前为止,XCP协议已经迭代到了1.5版本 ,每个版本更新如下:
版本 |
发布时间 |
变更点 |
1.0 |
2003 |
1.传输层支持CAN、ETH(UDP和TCP/IP、SPI、USB) 2.发布标定测量 |
1.1 |
2008 |
1.增加传输层支持FlexRay |
1.2 |
2013 |
1.增加A2L-IF_DATA描述,用于预估ECU资源消耗 |
1.3 |
2015 |
1.增加了feature:ECU状态,Bypassing错误处理和时间参数相关 |
1.4 |
2017 |
1.新增DAQ模式:减少时间戳数据传输的压缩DAQ等 |
1.5 |
2017 |
1.新增“Software Debugging over XCP”标准 |
3.XCP技术通览
本质上,XCP协议是为使用者提供了对ECU内部memory的读写机制。读访问保证标定系统可以从RAM中读取观测量,即测量(measurement);写访问保证了标定系统可以对RAM中的标定量进行数值修改,即标定(calibration)。
因此,XCP的实现就采用了经典的master-slave问答形式。
3.1 XCP上下机通信模型
XCP基于Master-slave原则;标定系统作为Master,ECU通常作为Slave,Master与Slave之间通过标定工具(硬件例如ETAS的ES582、Vector的VX1000等)了解,使用XCP协议规定的指令进行交互;所以在Master和Slave的系统里均需集成XCP标准协议栈,就和诊断栈一样。
Master与Slave的命令交互帧叫做CTO(Command Transfer Objects);
Master与Slave的测量数据交互帧叫做DTO(Data Transfer Objects);
其通信模型如下:
图片来源:Vector官网
CTO缩写 |
全称 |
描述 |
CMD |
Command Packet |
Master给Slave发送的指令 |
RES |
Command Response Packet |
Slave返回给Master的命令正响应 |
ERR |
Error Packet |
Slave返回给Master的命令负响应 |
EV |
Event Packet |
Slave发给Master的异步事件帧 |
SERV |
Service Request Packet |
Slave发给Master的服务请求帧 |
DTO缩写 |
全称 |
描述 |
DAQ |
Data Acquisition |
Salve周期给Master发送测量数据 |
STIM |
Stimulation |
Master周期发送Slave的激励数据(Bypass常见) |
XCP提供了如下几种数据传输方式:
一问一答模式
Master块传输模式
Slave块传输
多问答模式
3.2 XCP指令集
3.2.1 XCP帧结构定义
ID域
DAQ主要是测量时根据DAQ list和ODT类型来定位数据的,以后有文章着重描述测量这块。
CTR可选,也是用于DAQ。
时间戳域
数据域
连接命令问答示例
3.2.2 标准指令集
所谓标准指令集,就是提供最基础的功能,包括Master和Slave的连接建立、断开,ECU身份识别,解锁受保护资源,获取当前会话状态等等。根据XCP1.5版本,标准指令集如下:
3.2.3 标定指令集
3.2.4 页切换指令集
3.2.5 数据采集指令集
3.2.6 刷写指令集
用到的指令PROGRAM_START(D2)
用到的指令有 SET_MTA(F6)、PROGRAM_CLEAR(D1)。
PROGRAM_VERIFY(C8)、
PROGRAM_RESET(CF)
但在实际使用,通常不怎么用这个,都是标号导出hex,通过诊断刷进去。
因为以前如果是INCA,就得开发ProF文件,其次刷写的效率真的很低。
3.3 ECU描述文件(A2L)概述
既然标定测量的本质是对ECU内部memory进行读写访问,那么Master是通过什么途径知道存放在ECU内部的标定量、观测量的地址的? 既然Master和Slave之间是通过CAN\ETH\FlexRay等通讯,它们之间的通信速率、采样点是如何同步的?
3.3.1 标定上位机的标定、测量
|
|
|
|
|
|
|
|
|
|
|
|
|
3.3.2 A2L文件格式
AML部分:描述了XCP协议的相关信息,关键字/begin A2ML ... /end A2ML ECU通用部分:描述了ECU的部分信息,比如ECU byte order,对齐方式,标定Flash\RAM等,关键字 /begin MOD_COMMON ... /end MOD_COMMON;/begin MOD_PAR ... /end MOD_PAR等 IF_DATA:描述了通讯接口,传输层相关信息,这个INCA要求特点严格,增加在CAN的波特率描述上调bug调了大概半个月,就是因为采样点的原因。 A2L对象:包含了标定量、观测量的具体地址、转换公式等,关键词 /begin CHARACTERISTIC ... /end CHARACTERISTIC